﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Core.ProcessManager.Client.UI;
using PSE.ProcessManager.Common.Process;

namespace Sinacor.UI.Bovespa.ImportacaoExportacao.Communication
{
    public class ProcessoExportacaoDistribuicao : BaseCommunicationProcess<Sinacor.Process.Bovespa.Distribuicao.Client.Exportacao>  
    {
        #region Construtor

        public ProcessoExportacaoDistribuicao(SessionInformation session)
			: base(session)
		{
            this.Process.ExportacaoConcluida += new EventHandler<PSE.ProcessManager.Common.Process.ProcessEventArgs<Sinacor.Process.Bovespa.Distribuicao.ProcessEntity.ResultadoExportacao>>(Process_ExportacaoConcluida);
            this.Connect();
		}

        #endregion

        #region Eventos

        public event EventHandler<ProcessEventArgs<Model.ResultadoExportacao>> ExportacaoConcluida;

        #endregion

        #region Event Handlers

        private void Process_ExportacaoConcluida(object sender, PSE.ProcessManager.Common.Process.ProcessEventArgs<Sinacor.Process.Bovespa.Distribuicao.ProcessEntity.ResultadoExportacao> e)
        {
            Translator.ProcessEntityToModel.ExportacaoDistribuicao translatorExportacaoDistribuicao = new Translator.ProcessEntityToModel.ExportacaoDistribuicao();
            
            try
            {
                if (ExportacaoConcluida != null)
                    ExportacaoConcluida(this, new ProcessEventArgs<Model.ResultadoExportacao>(translatorExportacaoDistribuicao.ToResultadoExportacao(e.Parameter)));
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }

        #endregion

        #region Métodos

        public void ExportarDistribuicao(Model.Parameter.FiltroExportacaoDistribuicao model)
        {
            Translator.ModelToProcessEntity.ExportacaoDistribuicao translatorRequest;

            try
            {
                translatorRequest = new Translator.ModelToProcessEntity.ExportacaoDistribuicao();
                this.Process.ExportarDistribuicao(translatorRequest.ToFiltroExportacaoDistribuicao(model));
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }

        #endregion
    }
}
